package 校赛.真题._2022校赛;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author 挚爱之夕
 * @version 1.0
 * @implSpec
 * 题目描述
 * 有n个同学想要组队，但是这些同学之间存在一些矛盾或者是要好关系。若两个同学关系要好，那么他们必须要在一队中；
 * 若两个同学之间有矛盾，那么他们两个必然不可以在一队；若没有矛盾也不要好的同学，他们可以随意分配。
 * 换言之，就是判断分组时可以把有矛盾的同学分开，关系友好的同学都分在一组。
 * 现在由小A来分配组队，请你帮帮他，来判断一下这些人是否可以成功组队，若组队成功，则输出”YES”，反之输出“NO”。

 * 输入格式
 * 第一行包含一个正整数 n，表示该需要组队的人数。
 * 以下 n行每行包含3 个整数 ai，bi，xi，描述一对同学之间的关系，相邻整数之间用单个空格隔开。
 * 若xi=1，则表示ai和bi关系友好，若xi=0，则表示ai和bi有矛盾。

 * 输出格式
 * 输出YES或者NO。YES 表示这一组同学可以成功组队，NO表示不可成功组队。

 * 数据范围
 * 1 ≤ n ≤ 100000,
 * 1 ≤ ai，bi ≤ n，对于任何一个i，满足ai不等于bi，并且对于任意两个人，他们之间不会既存在矛盾，也关系友好，
 * 0≤ xi≤ 1

 * 样例1
 * 输入数据 1
3
1 2 1
2 3 1
1 3 0
 * 输出数据 1
 * NO
 * 样例1解释
 * 1和2之间关系友好，他们必须在一队中，2和3关系友好，他们也必须在一对中，此时1 2 3都在同一队中，
 * 但由于1和3之间有矛盾，他们又不能在一队，所以这组人无法成功组队，输出NO。
 * @since 2023 - 03 - 27 - 20:22
 */
public class F_组队 {
}
class Main_F{
    //fa[i] 表示 i 的父节点编号
    static int[] fa;
    //存储矛盾关系
    static List<int[]> list = new ArrayList<>();
    //初始化父节点为自己
    static void init(){
        for(int i = 0; i < fa.length; i++){
            fa[i] = i;
        }
    }
    //查找所在树的根节点
    static int find(int a){
        if(fa[a] == a) return a;
        //路径压缩
        fa[a] = find(fa[a]);
        return fa[a];
    }
    //合并集合
    static void merge(int x,  int y){
        fa[find(x)] = find(y);
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        fa = new int[n + 1];
        init();
        int ai, bi, xi;
        for(int i = 0; i < n; i++){
            ai = sc.nextInt();
            bi = sc.nextInt();
            xi = sc.nextInt();
            if(xi == 0){
                //存储矛盾关系
                list.add(new int[]{ai, bi});
            }else{
                merge(ai, bi);
            }
            if(!sc.hasNext()) break;
        }
        boolean can = true;
        int fx, fy;
        //检查是否冲突
        for(int[] relation : list){
            fx = find(relation[0]);
            fy = find(relation[1]);
            if(fx == fy){
                can = false;
                break;
            }
        }
        if(can){
            System.out.println("YES");
        }else{
            System.out.println("NO");
        }
    }
}